/*
带头节点
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct LNode
{
    int data;
    struct LNode *next;
} LNode;

typedef struct Queue
{
    LNode *front, *rear;
} Queue;

// 带头结点的队列的初始化
void InitQueue(Queue &q)
{
    q.front = q.rear = (LNode *)malloc(sizeof(LNode));
    q.front->next = NULL;
}

// 判空
bool Empty(Queue &q)
{
    if (q.front == q.rear)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 入队列
void InsertQueue(Queue &q, int x)
{
    LNode *p = (LNode *)malloc(sizeof(LNode));
    p->data = x;
    p->next = NULL;
    q.rear->next = p;
    q.rear = p;
}

// 出队列
bool OutQueue(Queue &q, int &x)
{
    if (q.rear == q.front)
    {
        return false;
    }
    LNode *p = q.front->next;
    x = p->data;
    q.front->next = p->next;
    if (q.rear == p)
    {
        q.rear = q.front;
    }
    free(p);
    return true;
}

int main()
{
    Queue q;
    InitQueue(q);
    return 0;
}